package main

import (
	"go-xorm-01/utils"
	"time"
	"xorm.io/xorm/names"
)

// 前缀映射，后缀映射和缓存映射 ： https://xorm.io/zh/docs/chapter-02/2.prefix/
// 通过 names.NewPrefixMapper(names.SnakeMapper{}, "prefix") 可以创建一个在 SnakeMapper 的基础上在命名中添加统一的前缀，当然也可以把 SnakeMapper{} 换成 SameMapper 或者你自定义的 Mapper。
// 例如，如果希望所有的表名都在结构体自动命名的基础上加一个前缀而字段名不加前缀，则可以在 engine 创建完成后执行以下语句：
//
// tbMapper := names.NewPrefixMapper(names.SnakeMapper{}, "prefix_")
// engine.SetTableMapper(tbMapper)
// 执行之后，结构体 type User struct 默认对应的表名就变成了 prefix_user 了，而之前默认的是 user
//
// 通过 names.NewSuffixMapper(names.SnakeMapper{}, "suffix") 可以创建一个在 SnakeMapper 的基础上在命名中添加统一的后缀，当然也可以把SnakeMapper换成SameMapper或者你自定义的Mapper。
//
// 通过 names.NewCacheMapper(names.SnakeMapper{}) 可以创建一个组合了其它的映射规则，起到在内存中缓存曾经映射过的命名映射。
func main() {
	setMapper()
}

func setMapper() {
	//例如，如果希望所有的表名都在结构体自动命名的基础上加一个前缀而字段名不加前缀，
	engine := utils.GenerateEngine()
	tbMapper := names.NewPrefixMapper(names.SameMapper{}, "prefix_")
	engine.SetTableMapper(tbMapper)
	// 自动同步结构体到数据库,见sql.sql
	engine.Sync2(new(UserPrefix))

}

// UserPrefix
// @Description: UserPrefix
type UserPrefix struct {
	ID            int64
	Username      string
	Password      string
	RegisterTime  time.Time
	LastLoginTime time.Time
}
